# ********************************************
# 使用面向对象思想对爬虫代码进行封装
# V1.0：实现一个页面的元素抓取
# 一共设计3个方法，2个属性
# ********************************************

import requests
from lxml import etree


# 定义爬虫类
class spider_V1():
    # *************获取页面信息**********************
    def get_page(self):
        # 输入：URL
        url = "http://42.192.62.88:30166/"

        # 发送请求
        response = requests.get(url)
        # 页面编码转换，不需要了，因为编码格式为utf-8，不需要再进行转换了
        # code=response.apparent_encoding
        # print(code)
        # 设置网站编码属性
        # response.encoding='gbk'

        self.content = response.text
        print(self.content)

    # ****************提取页面元素****************************
    def get_element(self):
        # 存储抓取数据
        # listcont = []
        # 将页面信息转化为dom格式
        doc = etree.HTML(self.content)
        tmp = ""
        # 循环提取一个页面上的元素
        for i in range(1, 11):
            # 通过xpath进行元素定位，获取页面最右侧的【】右侧的标题文字：例如；51Testing独家连载：智能驾驶之激光雷达算法详解(图)
            ele = doc.xpath('/html/body/div[4]/div[2]/ul[1]/li[' + str(i) + ']/a/text()')[0]

            # 打印输出元素
            print(i, ele)
            # 元素内容列表
            # 将元素逐个添加到列表中
            tmp = tmp + str(i) + ele + "\n"
        self.listcontent = tmp

    # ****************保存抓取内容****************************
    def save_element(self):
        # 元素内容列表
        # 创建一个文件
        file = open("spider.txt", "w")
        # 写入元素内容
        file.write(self.listcontent + "\n")
        # 保存并关闭文件
        file.close()

    def spider_run(self):
        # 实例化
        obj = spider_V1()
        # 调用抓取页面
        obj.get_page()
        obj.get_element()
        obj.save_element()


# 实例化类，进行类方法的调用
if __name__ == '__main__':
    # 逐个方法调试
    # 实例化
    obj = spider_V1()
    # 调用抓取页面
    obj.get_page()
    obj.get_element()
    obj.save_element()
